In one well-known color scheme, each pixel in an image is represented by a single byte having a value corresponding to the pixel's color. The value of the byte serves as an index to a 256-byte color table, or palette. The palette is a 256 by 3 byte array, with each indexed entry in the palette having a first byte specifying a red level, a second byte specifying a green level and a third byte specifying a blue level. In another well-known scheme referred to as 24-bit true color, each pixel has four bytes directly stored therefor, one red, one green, one blue and one for various flags. In either scheme, the image may be stored as an array of such bytes.
The byte arrays representing video images are often compressed to save both storage space and the amount of time required to transfer the data from one medium (e.g., CD-ROM) to another (e.g., random access memory). For example, with the 256-byte color scheme, existing image data compression techniques utilize a two-byte format, with a first byte representing a run length of contiguous pixels of one color and the second byte identifying that color. This compression scheme works well with images having long runs (up to 256 pixels) of pixels of the same color. However, where there are few runs of constant color, the encoding scheme approaches two bytes per pixel, which is worse than leaving the data uncompressed with one byte per pixel.
Other types of compression schemes are applied to previously fixed descriptions of the pixel data. One such technique, known as LZW, (which stores files with a ".GIF" extension), examines fixed image data (or other types of data) for patterns of replicated data. LZW then encodes the data as a pattern length followed by the data in that pattern, and the compressed image data includes references to the patterns. As can be appreciated, such a compression technique functions well when there are a few patterns repeated many times, but is often not very useful for compressing many other types of images.
Another compression scheme applied to fixed image data is known as JPEG, which first breaks an image into rectangular portions, and then applies algorithms to reduce the amount of data required to describe those portions. Significantly, JPEG image compression is not lossless, that is, the pixel information cannot be precisely recreated from the compressed data. In short, existing image data-compression schemes have a number of drawbacks associated therewith, and no one compression scheme is optimal for every image.
Moreover, consideration must be given to the decompression of the image, particularly given the likelihood that an end-user decompressing a compressed image has a less-powerful computer than the manufacturer or the like that originally compressed the image. In general, as the compression scheme increases in complexity, the amount of compression achieved is increased. However, often times the more complex the compression scheme, the greater the cost of decompression in terms of time and/or processing power required to decode the image.